package br.com.remedioCerto.service;

import java.util.Calendar;

import android.app.AlarmManager;
import android.app.IntentService;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import br.com.remedioCerto.enumerator.FrequenciaEnum;
import br.com.remedioCerto.enumerator.PeriodoEnum;
import br.com.remedioCerto.model.Horario;
import br.com.remedioCerto.model.Receita;

public class ReceitaAlarmeService extends IntentService {
	 
	 public static final String TAG = "ReceitaAlarmeService";
	 public static final Long INTERVALO_DIA = 86400000L;
	 public static final Long INTERVALO_SEMANA = 86400000L*7;
	 
	 private Receita receita;   
	
	public ReceitaAlarmeService() {
		super(TAG);
	}

	 @Override
    protected void onHandleIntent(Intent intent) {
        execute(intent);
    }

	
	private void execute(Intent intent) {
		receita = (Receita)intent.getSerializableExtra("receita");
		
		
		if(receita.getPeriodoTipo() == PeriodoEnum.continuo.getId()){
			if(receita.getFrequenciaTipo() == FrequenciaEnum.todos.getId()){
				continuoDiario();
			}
			
			if(receita.getFrequenciaTipo() == FrequenciaEnum.semana.getId()){
				continuoSemanal();
			}
		}
		
		if(receita.getPeriodoTipo() == PeriodoEnum.dias.getId()){
			if(receita.getFrequenciaTipo() == FrequenciaEnum.todos.getId()){
				continuoDiario();
				continuoDiarioCancelamento();
			}
			
			if(receita.getFrequenciaTipo() == FrequenciaEnum.semana.getId()){
				continuoSemanal();
			}
		}
	}

	private void continuoDiarioCancelamento() {
		
		
	}

	private void continuoSemanal() {
		if(receita.isSemanaDomingo())continuoSemanalPasso2(Calendar.SUNDAY);
		if(receita.isSemanaSegunda())continuoSemanalPasso2(Calendar.MONDAY);
		if(receita.isSemanaTerca())continuoSemanalPasso2(Calendar.TUESDAY);
		if(receita.isSemanaQuarta())continuoSemanalPasso2(Calendar.WEDNESDAY);
		if(receita.isSemanaQuinta())continuoSemanalPasso2(Calendar.THURSDAY);
		if(receita.isSemanaSexta())continuoSemanalPasso2(Calendar.FRIDAY);
		if(receita.isSemanaSabado())continuoSemanalPasso2(Calendar.SATURDAY);
	}
	
	private void continuoSemanalPasso2(int diaDaSemana) {
		for(Horario h: receita.getHorairos()){
			
			h.setReceita(receita);
			Integer identificado = Integer.parseInt(h.getId()+""+diaDaSemana);
			Intent alarme = new Intent("RECEITA_ALARME_RECEIVE");
			alarme.putExtra("horario", h);
	        PendingIntent pi = PendingIntent.getBroadcast(this,identificado, alarme, PendingIntent.FLAG_UPDATE_CURRENT);

		    Calendar horaAlarma = Calendar.getInstance();
		    horaAlarma.setTimeInMillis(receita.getInicio().getTimeInMillis());
		    horaAlarma.set(Calendar.DAY_OF_WEEK, diaDaSemana);
		    horaAlarma.set(Calendar.HOUR_OF_DAY, h.getHora());
		    horaAlarma.set(Calendar.MINUTE, h.getMinuto());
		    horaAlarma.set(Calendar.SECOND, 0);
		    
		    if(horaAlarma.getTimeInMillis()< Calendar.getInstance().getTimeInMillis())
		    	horaAlarma.add(Calendar.DAY_OF_MONTH, 7);

		    
		    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
	        if (receita.isStatus()) {
	            am.setRepeating(AlarmManager.RTC_WAKEUP,horaAlarma.getTimeInMillis(),INTERVALO_SEMANA, pi);
	        } else {
	        	am.cancel(pi);
	        }
		}
	}


	private void continuoDiario() {
		
		for(Horario h: receita.getHorairos()){
			
			h.setReceita(receita);
			Intent alarme = new Intent("RECEITA_ALARME_RECEIVE");
			alarme.putExtra("horario", h);
	        PendingIntent pi = PendingIntent.getBroadcast(this, h.getId().intValue(), alarme, PendingIntent.FLAG_UPDATE_CURRENT);

		    Calendar horaAlarma = Calendar.getInstance();
		    horaAlarma.setTimeInMillis(receita.getInicio().getTimeInMillis());
		    horaAlarma.set(Calendar.HOUR_OF_DAY, h.getHora());
		    horaAlarma.set(Calendar.MINUTE, h.getMinuto());
		    horaAlarma.set(Calendar.SECOND, 0);

		    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
	        if (receita.isStatus()) {
	            am.setRepeating(AlarmManager.RTC_WAKEUP,horaAlarma.getTimeInMillis(),INTERVALO_DIA, pi);
	        } else {
	        	am.cancel(pi);
	        }
			
		}
		
	}
	
}
